Exceptions are an important error handling aspect of many programming languages, especially object-oriented languages such as C++ and Java. Exceptions are oftentimes used to indicate unusual error conditions during the execution of an application—for example, resource exhaustion—and provide a way to transfer control to special-purpose exception handling code. The exception handling code deals with the unusual circumstance and either terminates the program or returns control to the non-exceptional part of the program—if possible. Consequently, exceptions introduce additional—and oftentimes complex—interprocedural control flow into the program in addition to any standard—non-exceptional—control flow.